<?php

namespace Model;

class FileUploadHandler{

	private $m_db = NULL;

	private $m_name = "name";
	private $m_type = "type";
	private $m_error = "error";
	private $m_tmp_name = "tmp_name";	
	private $m_messageExists = "UploadMessageExists";
	
	public function __construct(Database $database){
		$this->m_db = $database;
	}
	
	/**
	 * Kontrollerar om en fil är av tillåten typ
	 * @param object $file innehåller en uppladdad fil
	 */
	public function CheckFile($file)
	{
		$allowedExtensions = array("jpg", "JPG", "jpeg", "gif", "png");
		
		$fileExtension = explode(".", $file[$this->m_name]);

		$fileExtension = end($fileExtension);

		// Kontrollerar filens och filändelse
		if($file[$this->m_type] == "image/png" 
			|| $file[$this->m_type] == "image/gif"
			|| $file[$this->m_type] == "image/jpeg"
			|| $file[$this->m_type] == "image/pjpeg"
			&& in_array($fileExtension, $allowedExtensions) == true){
				if($file[$this->m_error] > 0){
					return false;
				}
				else{
					return true;
				}
		}
		else{
			return false;
		}
	}

	/**
	 * Kontrollerar om en fil redan finns på servern
	 * @param object $file innehåller en uppladdad fil
	 * @param string $path sökvägen till mappen där filer sparas
	 */
	public function DoFilenameExist($file, $path)
	{		
		return file_exists($path . $file[$this->m_name]);
	}

	/**
	 * Sparar en uppladdad fil på servern
	 * @param object $file innehåller en uppladdad fil
	 * @param string $path sökvägen till mappen där filer sparas
	 */
	public function SaveFile($file, $path)
	{
		move_uploaded_file($file[$this->m_tmp_name], $path . $file[$this->m_name]);
		return true;
	}

	/**
	 * Sparar filenamn och userid i databasen
	 * @param String $fileName 	innehåller ett filnamn
	 * @param int $userId   	innehåller ett användarid
	 */
	public function SaveFileToDatabase($filename, $userid)
	{
		$sql = "INSERT INTO files (filename, userid) VALUES(?, ?)";		
		$stmt = $this->m_db->Prepare($sql);

		$stmt->bind_param("si", $filename, $userid);

		if($this->m_db->Execute($stmt)){
			$stmt->close();
			return true;
		}		
		$stmt->close();
		return false;	
	}

	/**
	 * Hämtar ut filnamnen ifrån databasen
	 * @param int $userId Id på den användare vars bilder som skall skrivas ut
	 */
	public function GetFilesFromDatabase($userid)
	{
		$sql = "SELECT * FROM files WHERE userid = ?";

		$stmt = $this->m_db->Prepare($sql);

		$stmt->bind_param("s", $userid);

		$this->m_db->Execute($stmt);

		$fileid;
		$filename;
		$fileUserid;
		$filesArray = array();

		$stmt->bind_result($fileid, $filename, $fileUserid);

		while($stmt->fetch()){

			$file = new \Model\File($fileid, $filename, $fileUserid);

			$filesArray[] = $file;
		}
		return $filesArray;
	}

	/**
	 * Hämtar alla filer ifrån en mapp
	 * @param string $path sökvägen till mappen där filer sparas
	 */
	public function GetFilesFromDir($path)
	{
		$directoryHandle = opendir($path);
		$filesArray = array();

		if ($directoryHandle) {
    		while (($file = readdir($directoryHandle)) == true) {
	        	if ($file != "." && $file != "..") {
	            	$files[] = $file;
       			}
   			}   			    		
		}
		closedir($directoryHandle);
		return $files;	
	}	

	/**
	 * Sätter ett meddelande
	 * @param String $userMessage innehåller det meddelande som skall sättas
	 */
	public function SetUserMessage($userMessage)
	{
		$_SESSION[$this->m_messageExists] = $userMessage;
	}

	/**
	 * Kontrollerar om det finns något meddelande satt och returnerar det
	 */
	public function UserMessageExists()
	{
		if(isset($_SESSION[$this->m_messageExists])){
			return $_SESSION[$this->m_messageExists];
		}
		else{
			return false;
		}
	}

	/**
	 * Tar bort eventuellt meddelande ifrån sessionen
	 */
	public function ClearUserMessage()
	{
		if(isset($_SESSION[$this->m_messageExists])){
			unset($_SESSION[$this->m_messageExists]);
		}
	}

	/**
	 * Skickar användaren till index.php
	 */
	public function RedirectToSelf()
	{
		header('Location:/regolf/index.php');
	}
}